package com.sinbad.produce.mqconfig;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * direct交换器模式（一对一）
 */
@Configuration
public class DirectConfigMQ {


    /***********************创建队列****************/
    @Bean(name = "directQueue")
    public Queue queue() {
        /**
         * name -队列的名称。
         * durable -如果我们声明一个持久队列，则为true（该队列将在服务器重启后保留下来）
         * exclusive -排他队列，只对创建这个queue的Connection可见，Connection关闭，那么这个queue删除。
         * autoDelete -如果服务器在不再使用该队列时不应该删除该队列，则为false
         */
        return new Queue("directQueue", true, false, false);
    }

    /***********************创建Direct交换器****************/
    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("directExchange", true, false);
    }

    /***********************队列和交换器绑定****************/
    @Bean
    public Binding bindingDirectExchangeMsg(@Qualifier("directQueue") Queue queueMessage,
                                            DirectExchange directExchange) {

        /**与fanout模式不同的是，需要声明交换机与队列之间的BindingKey，如下with设置*/
        return BindingBuilder.bind(queueMessage).to(directExchange).with("directKey");
    }
}
